git命令使用

2018-4-4 12:02:31 星期三 

git常用操作流程简介:

如果本地有一个文件被修改了, 

一, 如果我们希望保存这个更改, 那就执行命令: git add, 就会把修改后的整个文件拷贝压缩存储起来(即生成快照), 它存储到了本地的"暂存区"

二, 如果我们确定这个修改没问题了, 希望保存为项目的一部分, 那就执行git commit 命令, 就会保存到本地分支上去, 这一步会生成一系列对象,

  这些对象保存的信息有:

  1. 因为源文件被修改而生成的备份文件;

  2. 当前项目或分支中所有最新文件的链接(以树形存储, 区分他们的层级关系),

  3. 提交者的信息, 注释信息, 以及上一个提交保存的信息的地址等

三, 如果我们希望我的修改被其他同事知道, 就执行git push命令, 把本地更改的信息推送到远程版本库, 跟它合并

 

概念:

Tag:  git 每一次提交都会生成一个40位hash的哈希值, 它关联了一个当时项目所有最新文件的连接, 因为这个hash值不好记, 所以可以用tag 命令生成一个好记得名字, 因此一个tag名对应一个commit

分支:  分支就是指向某一次commit的链接/指针, 分支名就是指针的名字

  比如你以master分支为蓝本创建一个分支dev, 那这个dev里的所有文件地址其实都是指向master里的文件,

  然后你对其中的某些文件进行修改, 修改后, 如果执行的commit命令, 那么会把这些被修改的文件生成一个副本, 它保存了修改后的最终内容, 但master里的这个文件还原来的文件内容, 而dev中没有被修改的文件依旧指向master中的对应文件 (可以理解为写时复制)

  现在dev就不再指向master对应的那一堆文件了, 而是指向了包裹了新生成的备份文件和没有修改的文件的链接(注意不是文件内容而是它的链接)

快速合并:  如果dev分支包含了最新的内容, master只是他的一个子集, 那么快速合并, 就是简单的将master指针指向dev指针

参考: 

git基础概念

git分支

git快照

 

2015-07-15 11:59:11

全局设置

git config --global user.name "username" //用户名

git config --global user.email email //邮箱

git config --global credential.helper store  //记住密码

git config --list //查看配置信息

ssh-keygen -t rsa -C "abc@efg.com" // -C 注释

git pull : 相当于 SVN up

git status : 相当于 SVN st

git add a.txt: 新添加文件 或者 将文件修改保存到索引中, 和SVN add的作用一样

git checkout -- a.txt : 忽略本地对a.txt的更改, 将其改回之前的版本 (注意两个减号)

git commit a.txt : 提交到本地存储

git push : 提交到远程版本库中, 相当于 SVN ci

 

查看本地分支: git branch

查看远程分支: git branch -r

查看本地和远程分支: git branch -a

 

删除本地分支: git branch -D <branchName>

删除远程分支: 

    方法一: git push origin --delete <branchName>

    方法二: git push origin :<branchName>

 

本地新建了分支, 需要同步到远程版本库中, 让其它小伙伴看到

git push origin 本地分支名:远程分支名

如果提示没有权限

Unable to negotiate with 192.168.35.116 port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss
fatal: Could not read from remote repository.

可以到.ssh目录下边, 添加一个名字为config的文件内容是: (注意, 前提是已经生成了sshkey, 并上传到了远程代码服务器的配置中)

Host *
HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedKeyTypes +ssh-rsa

 

从远程检出分支到本地作为新的本地分支

git checkout -b 本地分支名 origin/远程分支名

 

pull强制覆盖本地改变

git fetch --all

git reset --hard origin/master

 

拉取代码并跟某个分支合并

git pull origin master:brantest

 

 

设置本地分支与远程分支关联

git branch --set-upstream debug origin/debug (已废弃)

git branch --track origin/serverfix

 

git push --set-upstream debug origin/debug  (推送到远程, 并跟踪, 没有就创建)

git checkout --track origin/branch_name (从远程拉下来, 在本地新建分支, 并跟踪) (参考)

 

 

设置存储密码

[credential]
helper = store --file /mnt/thumbdrive/.git-credentials
helper = cache --timeout 30000

 

查看日志:

git log --pretty=oneline (单行查看日志)

 

查看敲过的命令

git reflog

 

对比当前工作区与上一个版本的差异

git diff --name-status HEAD~1

输出举例:

A       aa
M       test.log.bak
D       test1.log.bak

 

git clone 直接带上用户名密码:

git clone http://username:password@remote

 

git reset HEAD  //把暂存区的改动都撤回到工作区

git checkout . //把工作区的改动都撤销, 使代码变为改动之前的

 

git reflog show --date=iso master 查看master分支的各种事件的时间

git diff cc3bdd82 b359916f --stat  统计两次提交之间的文件变化

 

##在有文件的目录中初始化git仓库, 并与远程仓库合并

参考

#git init

#git add .

#git commit -m "init" 

#git remote add origin  git@git.xxxxxx 

#git pull origin master --allow-unrelated-histories

#git push --set-upstream origin

 

## 获取tag列表

正序:  git for-each-ref refs/tags --sort=taggerdate --format '%(refname)'

倒序:  git for-each-ref refs/tags --sort=-refname --format='%(refname)'

 

## 如果文件已经加入了git仓库, 再添加 .gitignore 将会不起作用

# git rm --cached 文件名 //不再跟踪某文件, 需要配合同时删除远程仓库中的文件

# git update-index --assume-unchanged 文件名  //忽略某个文件的提交

# git update-index --no-assume-unchanged 文件名 //取消忽略某个文件的提交

 

## 忽略相关的知识  Git忽略文件.gitignore详解_ThinkWon的博客-CSDN博客

# / 结束的模式只匹配文件夹以及在该文件夹路径下的内容,但是不匹配该文件

# / 开始的模式匹配项目跟目录

# 如果一个模式不包含斜杠,则它匹配相对于当前 .gitignore 文件路径的内容,如果该模式不在 .gitignore 文件中,则相对于项目根目录

posted @ 2015-07-15 12:57  myD  阅读(392)  评论(0编辑  收藏  举报